1 module hip.hipaudio.backend.avaudio.source; 2 3 version(iOS): 4 import avaudiosourcenode; 5 import avaudioplayernode; 6 import avaudiosinknode; 7 import avaudioionode; 8 import hip.hipaudio.backend.avaudio.clip; 9 import hip.error.handler; 10 import hip.hipaudio.backend.avaudio.player; 11 import hip.hipaudio.audiosource; 12 13 class HipAVAudioSource : HipAudioSource 14 { 15 AVAudioSinkNode sink; 16 AVAudioPlayerNode player; 17 AVAudioPCMBuffer buffer; 18 19 protected bool isClipDirty = true; 20 21 22 this(HipAVAudioPlayer player) 23 { 24 this.player = player.playerNode; 25 } 26 alias clip = HipAudioSource.clip; 27 28 29 override IHipAudioClip clip(IHipAudioClip newClip) 30 { 31 if(newClip != clip) 32 isClipDirty = true; 33 super.clip(newClip); 34 return newClip; 35 } 36 37 alias loop = HipAudioSource.loop; 38 override bool loop(bool value) 39 { 40 bool ret = super.loop(value); 41 return ret; 42 } 43 44 45 46 override bool play() 47 { 48 if(isPlaying) 49 { 50 } 51 AVAudioPCMBuffer b = getBufferFromAPI(clip).avaudio; 52 player.scheduleBuffer(b); 53 player.play(); 54 return true; 55 } 56 override bool stop() 57 { 58 player.stop(); 59 isPlaying = false; 60 return false; 61 } 62 override bool pause() 63 { 64 player.pause(); 65 isPaused = true; 66 return false; 67 } 68 override bool play_streamed() => false; 69 70 71 ~this() 72 { 73 74 } 75 }